583. Delete Operation for Two Strings
1. Question
Given two strings word1
and word2
, return the minimum number of steps required to make word1
and word2
the same.
In one step, you can delete exactly one character in either string.
2. Examples
Example 1:
Input: word1 = "sea", word2 = "eat"
Output: 2
Explanation: You need one step to make "sea" to "ea" and another step to make "eat" to "ea".
Example 2:
Input: word1 = "leetcode", word2 = "etco"
Output: 4
3. Constraints
1 <= word1.length, word2.length <= 500
word1
andword2
consist of only lowercase English letters.
4. References
来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/delete-operation-for-two-strings 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
5. Solutions
dp思想:
找到最长公共子序列,则答案为两个单词的和减去两倍最长公共子序列的长度。
维护一个二维数组,用于计算最长公共子序列。如果i和j位置的字母相同,则为最长的(左上对角)数+1。如果不同,就是上或者左的最大值。
class Solution {
public int minDistance(String word1, String word2) {
int[][] arr = new int[word1.length() + 1][word2.length() + 1];
for (int i = 1; i <= word1.length(); i++) {
for (int j = 1; j <= word2.length(); j++) {
if (word1.charAt(i - 1) == word2.charAt(j - 1)) {
arr[i][j] = arr[i - 1][j - 1] + 1;
} else {
arr[i][j] = Math.max(arr[i][j - 1], arr[i - 1][j]);
}
}
}
return word1.length() + word2.length() - 2 * arr[word1.length()][word2.length()];
}
}